C 언어
✒️ 2025-05-15 15:56 내용 수정
수제비 2024 정보처리기사 필기 5판 1권의 내용을 정리
TCPSchool의 내용을 참고하여 정리
유닉스 운영 체제에서 사용하기 위해 개발된 프로그래밍 언어
- 참고 자료 : 위키백과 C
- 수많은 운영 체제의 커널도 C로 만들었으며, C++은 C에서 파생된 객체 지향형 언어다.
- 커널(Kernel) : 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램으로, 시스템의 모든 것을 완전히 제어한다.
- 시스템 프로그램 개발에 적합하며, 응용 프로그램 개발에도 많이 쓰인다.
- 저급 언어(기계어, 어셈블리어)와 고급 언어(Java, Python 등)의 특징을 모두 가지고 있는 절차 지향 프로그래밍 언어이다.
- 절차 지향 프로그래밍 : 프로시저 호출의 개념을 바탕으로 한 프로그래밍 패러다임이다.
- 프로시저 : 소프트웨어에서 특정 동작을 수행하는 일정 코드 부분으로, 특정한 작업을 위해 재활용할 수 있도록 구현한 코드 블록이다.
장단점
- 장점
- C로 작성된 프로그램은 다양한 하드웨어로의 이식성이 좋다.
- 절자 지향 프로그래밍 언어이므로 코드가 복잡하지 않아 상대적으로 유지보수가 쉽다.
- 저급 언어의 특징을 가져 어셈블리어 수준으로 하드웨어를 제어할 수 있다.
- 단점
- 저급 언어의 특징으로 다른 고급 언어에 비해 학습하는 데 시간이 걸린다.
- 시스템 자원을 직접 제어할 수 있기에 프로그래밍 시에 세심한 주의를 기울여야 한다.
특징
- 기본 구조는 본문 전에 처리하는 전처리 부분과 본문으로 구성되어 있다.
#include 문
#define 문
int main() {
// 명령문
// return 문;
}
- 프로그램의 기본 단위는 함수이다.
- 하나 또는 그 이상의 함수로 이루어져 있으며, C로 구현되는 모든 프로그램은 반드시
main()함수를 가지고 있어야 한다. - 컴퓨터는 C 프로그램이 실행되면 제일 먼저
main()함수를 찾아 호출한다.
- 하나 또는 그 이상의 함수로 이루어져 있으며, C로 구현되는 모든 프로그램은 반드시
#include 문
#define 문
int main() {
return 0;
}
- 함수 내의 명령문은 세미콜론
;으로 끝나야 한다.- Java에서도 명령문 종료는 세미콜론을 사용했다.
- Python에선 세미콜론을 사용하지 않았고, JavaScript에서는 세미콜론이 없어도 동작되었다.
printf("test"); // 항상 주의
- C에선 대소문자를 구분한다.
- 변수나 함수 이름을 작성하거나 키워드 및 예약어를 사용할 때 대소문자를 정확히 구분해야 한다.
printf("test"); // 정상 출력
Printf("test"); // 오류 발생
- 자유 형식을 허용한다.
- 문법만 맞으면 여러 개의 명령문을 한 줄에 작성하거나, 하나의 명령문을 여러 줄에 나누어 사용할 수 있다.
int func() {printf("test");}
int func() {
printf("test");
}
- C에서 한 줄 주석은
//를 사용하고, 여러 줄 주석은/* ... */를 사용한다.
// 한 줄 주석
/*
여러 줄 주석
*/
실행 파일 생성 순서
1. 소스 파일(Source file) 작성
- C를 사용하여 문법에 맞는 프로그램을 작성한다.
- 소스 파일의 확장자는
.c이다.
2. 선행처리기(Preprocessor)에 의한 선행 처리
- 소스 파일 중 선행 처리 문자
#으로 시작하는 선행처리 지시문의 처리 작업을 수행한다. - 선행처리기는 코드를 생성하는 것이 아닌 컴파일러가 컴파일을 수행하기 전 소스를 재구성하는 역할을 한다.
3. 컴파일러(Compiler)의 컴파일
- 개발자가 작성한 프로그램을 컴퓨터가 이해할 수 있는 기계어로 번역하는 컴파일 작업을 수행한다.
- 오브젝트 파일 : 컴파일이 끝나 기계어로 번역된 파일이다.
- 확장자는
.o나.obj이다.
- 확장자는
4. 링커(Linker)에 의한 링크
- 링크는 하나 이상의 오브젝트 파일과 라이브러리 파일, 시동 코드를 합쳐 하나의 파일로 만드는 작업이다.
- 시동 코드(start-up file) : 운영체제와 인터페이스를 담당하는 코드
- 링커에 의한 링크가 수행되면 새로운 실행 파일이나 라이브러리 파일이 생성된다.
- 분할 컴파일 : 여러 개의 소스 파일을 작성하여 최종적으로 링크를 통해 하나의 실행 파일로 만드는 것이다.
5. 실행 파일을 생성한다.
- 선행처리-컴파일-링크를 통해 실행 파일을 생성한다.
- 확장자는
.exe이다.